package controlador;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.io.ManejadorArchivos;
import modelo.servicio.Reportes;

public class IndexControlador extends HttpServlet {

    private StringBuilder html;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String accion = request.getParameter("ac") == null ? "" : request.getParameter("ac");
        response.setContentType("text/html;charset=ISO-8859-1");
        PrintWriter out = null;
        //if (!accion.equals("ex")) {
        out = response.getWriter();
        //}
        html = new StringBuilder();
        String usuario = request.getSession().getAttribute("sUsuario").toString();
        String cia = request.getSession().getAttribute("sCompania").toString();
        try {
            if (accion.equals("re")) {
                int cliente = request.getParameter("cmb_cliente") == null
                        || request.getParameter("cmb_cliente").equals("")
                        || request.getParameter("cmb_cliente").equals("NA") ? 0 : Integer.parseInt(request.getParameter("cmb_cliente"));
                String serieFact = request.getParameter("txt_serie") == null
                        || request.getParameter("txt_serie").equals("") ? "T" : request.getParameter("txt_serie");
                int numeroFact = request.getParameter("txt_numero") == null
                        || request.getParameter("txt_numero").equals("") ? 0 : Integer.parseInt(request.getParameter("txt_numero"));
                String estatus = request.getParameter("cmb_estatus") == null ? "T" : request.getParameter("cmb_estatus");
                String fechaDesde = request.getParameter("txt_desde").equals("") ? "01/01/1989" : request.getParameter("txt_desde");
                String fechaHasta = request.getParameter("txt_hasta").equals("") ? "31/12/2222" : request.getParameter("txt_hasta");

                String nombreRepo = "sccrca0080e";
                String params = usuario + " " + cia + " " + cliente + " "
                        + serieFact + " " + numeroFact + " " + estatus + " " + fechaDesde + " " + fechaHasta;

                String infoRepor = null;
                infoRepor = Reportes.instancia().generarReporte(nombreRepo, params, usuario, "EX");
                String url = "";
                if (infoRepor != null && infoRepor.compareToIgnoreCase("ERROR") != 0) {
                    url = ManejadorArchivos.instancia().obtenerPropiedad("../conf.properties", "web_host");
                    url += ManejadorArchivos.instancia().obtenerPropiedad("../conf.properties", "sqr_carpeta_web") 
                            + infoRepor + ".csv";
                } else {
                    url = "#ERROR_REPORTE";
                }
                ArrayList<String[]> reportes = Reportes.instancia().obtener(usuario, cia, cliente, serieFact, numeroFact, estatus, fechaDesde, fechaHasta);
                if (!reportes.isEmpty()) {
                    request.setAttribute("reporte", reportes);
                    request.setAttribute("url_repo", url);
                    getServletContext().getRequestDispatcher("/front?v=4&ac=2").forward(request, response);
                } else {
                    out.println("<br/>Sin resultados");
                }
            } else if (accion.compareToIgnoreCase("de") == 0) {
                String folioInternet = request.getParameter("folio");
                String serie = folioInternet.substring(0, folioInternet.indexOf("-"));
                String numero = folioInternet.substring(folioInternet.indexOf("-") + 1, folioInternet.length());
                String[] detalle = Reportes.instancia().obtener(usuario, cia, serie, Integer.parseInt(numero));
                generarDetalle(detalle);
                out.println(html);
            } else if (accion.compareToIgnoreCase("up") == 0) {
                String folioInternet = request.getParameter("folio");
                String serie = folioInternet.substring(0, folioInternet.indexOf("-"));
                String numero = folioInternet.substring(folioInternet.indexOf("-") + 1, folioInternet.length());
                String[] detalle = Reportes.instancia().obtener(usuario, cia, serie, Integer.parseInt(numero));
                modificarDetalle(serie, numero, detalle);
                out.println(html);
            }
        } catch (Exception e) {
            out.println("Error: " + e.getMessage());
        } finally {
            out.close();
        }
    }

// <editor-fold defaultstate="collapsed" desc="Metodos HttpServlet. Click en el signo + izquierdo para editar el codigo.">
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
// </editor-fold>

    private void generarDetalle(String[] repo) {
        html.append("<table><tr><td><strong>Numero Cliente: </strong></td><td>")
                .append(repo[7])
                .append("</td></tr><tr><td><strong>Razon Social Cliente: </strong></td><td>")
                .append(repo[1])
                .append("</td></tr><tr><td><strong>Estatus: </strong></td><td>")
                .append(repo[2])
                .append("</td></tr><tr><td><strong>Fecha de Internet: </strong></td><td>")
                .append(repo[4])
                .append("</td></tr><tr><td><strong>Importe: </strong></td><td>")
                .append(repo[6])
                .append("</td></tr><tr><td><strong>Comentarios: </strong></td><td>")
                .append(repo[9])
                .append("</td></tr><tr><td><strong>Referencia Bancaria: </strong></td><td>")
                .append(repo[5])
                .append("</td></tr><tr><td><strong>Fecha Cancelacion: </strong></td><td>")
                .append(repo[8])
                .append("</td></tr><tr><td colspan='2'><hr/></td></tr><tr><td><strong>Recibo de cobro: </strong></td><td>")
                .append(repo[3])
                .append("</td></tr><tr><td><strong>Comentarios Banco: </strong></td><td>")
                .append(repo[10])
                .append("</td></tr><tr><td><strong>Fecha Caja: </strong></td><td>")
                .append(repo[11])
                .append("</td></tr><tr><td><strong>Estatus Pago: </strong></td><td>")
                .append(repo[12])
                .append("</td></tr><tr><td><strong>Fecha Cancelacion: </strong></td><td>")
                .append(repo[13])
                .append("</td></tr></table>");
    }

    private void modificarDetalle(String serie, String numero, String[] repo) {
        html.append("<form id='frm_complementar' action='pago' name='frm_complementar'>")
                .append("<table><tr><td><strong>Numero Cliente: </strong></td><td>")
                .append("<input type='hidden' name='ac' value='up'/>")
                .append("<input type='hidden' name='hid_serie' value='").append(serie).append("'/>")
                .append("<input type='hidden' name='hid_numero' value='").append(numero).append("'/>")
                .append(repo[7])
                .append("</td></tr><tr><td><strong>Razon Social Cliente: </strong></td><td>")
                .append(repo[1])
                .append("</td></tr><tr><td><strong>Estatus: </strong></td><td>")
                .append(repo[2])
                .append("</td></tr><tr><td><strong>Fecha de Internet: </strong></td><td>")
                .append(repo[4])
                .append("</td></tr><tr><td><strong>Importe: </strong></td><td>")
                .append(repo[6])
                .append("</td></tr><tr><td><strong>Comentarios: </strong></td><td>")
                .append(repo[9])
                .append("</td></tr><tr><td><strong>Referencia Bancaria: </strong></td><td>")
                .append("<input type='text' name='txt_referencia' class='text ui-widget-content ui-corner-all' title='Referencia Bancaria' value='")
                .append(repo[5])
                .append("'/>")
                .append("</td></tr><tr><td><strong>Fecha Cancelacion: </strong></td><td>")
                .append(repo[8])
                .append("</td></tr><tr><td colspan='2'><hr/></td></tr><tr><td><strong>Recibo de cobro: </strong></td><td>")
                .append(repo[3])
                .append("</td></tr><tr><td><strong>Comentarios Banco: </strong></td><td>")
                .append("<input type='text' name='txt_comentarios_bco' class='text ui-widget-content ui-corner-all' title='Comentarios Banco' value='")
                .append(repo[10])
                .append("'/>")
                .append("</td></tr><tr><td><strong>Fecha Caja: </strong></td><td>")
                .append(repo[11])
                .append("</td></tr><tr><td><strong>Estatus Pago: </strong></td><td>")
                .append(repo[12])
                .append("</td></tr><tr><td><strong>Fecha Cancelacion: </strong></td><td>")
                .append(repo[13])
                .append("</td></tr>") //<tr><td colspan=\"2\" align=\"right\"><input type=\"submit\" title=\"Complementar Informacion\" value=\"Complementar\"/></td></tr>")
                .append("</table></form>");

        html.append("<script type='text/javascript'>")
                .append("$('#frm_complementar').submit(")
                .append("   function() {")
                .append("      $.post('pago', $('#frm_complementar').serialize(), function(data) {")
                .append("         $('#pnl_mensajes').html(data);")
                .append("         $.post('index?ac=re', $(\"#frm_filtrado\").serialize(), function(data) {"
                + "                  $(\"#pnl_folios\").html(data);"
                + "               }).error(function() {"
                + "                  $('#pnl_folios').html('<br/>No se obtuvieron resultados del filtrados');"
                + "               });"
                + "               $('#pnl_folios').html(\"<p><img src='images/loading.gif'/><br/>Guardando...</p>\");")
                .append("      }).error(function() {")
                .append("         $('#pnl_mensajes').html('<br/>Error al guardar.');")
                .append("      });")
                .append("      $('#pnl_mensajes').html(\"<p><img src='images/loading.gif'/><br/>Guardando...</p>\");")
                .append("      return false;")
                .append("   });")
                .append("</script>");
    }
}
